/**
 * 通知工具函数
 * 提供 Toast 通知功能
 */
import { createApp } from 'vue'
import NotificationToast from '@/components/common/NotificationToast.vue'

/**
 * 显示通知
 * @param {string} message - 通知消息
 * @param {string} type - 通知类型: success, error, warning, info
 * @param {number} duration - 显示时长（毫秒），0 表示不自动关闭
 */
export function showNotification(message, type = 'info', duration = 5000) {
  // 创建临时容器
  const container = document.createElement('div')
  document.body.appendChild(container)

  let app = null
  let closeTimer = null

  // 清理函数
  const cleanup = () => {
    if (closeTimer) {
      clearTimeout(closeTimer)
      closeTimer = null
    }
    if (app) {
      setTimeout(() => {
        app.unmount()
        if (container.parentNode) {
          document.body.removeChild(container)
        }
        app = null
      }, 300) // 等待动画完成
    }
  }

  // 创建 Vue 应用实例
  app = createApp(NotificationToast, {
    message,
    type,
    duration: 0, // 组件内部自己处理自动关闭
    onClose: cleanup
  })

  // 挂载组件
  app.mount(container)

  // 如果设置了自动关闭时间，设置定时器
  if (duration > 0) {
    closeTimer = setTimeout(() => {
      cleanup()
    }, duration)
  }

  // 返回关闭函数
  return cleanup
}

/**
 * 成功通知
 */
export function showSuccess(message, duration = 5000) {
  return showNotification(message, 'success', duration)
}

/**
 * 错误通知
 */
export function showError(message, duration = 5000) {
  return showNotification(message, 'error', duration)
}

/**
 * 警告通知
 */
export function showWarning(message, duration = 5000) {
  return showNotification(message, 'warning', duration)
}

/**
 * 信息通知
 */
export function showInfo(message, duration = 5000) {
  return showNotification(message, 'info', duration)
}

// 默认导出
export default {
  show: showNotification,
  success: showSuccess,
  error: showError,
  warning: showWarning,
  info: showInfo
}

